'''
@file: 三创购物系统-xyy
@author : 熊亿阳
@Date : 2021/7/16

三创购物系统：

1.登陆验证：属性 方法 输入购物预算信息
2.商品：查看商品信息，查看菜单 已经购买信息
3.用户 可以随时退出 可以购买（扣款功能） 检验余额 充值系统
4.注册用户
'''
#面向对象编程：
name_passwd={}  #用来储存用户名和密码
login_name_dict={} #用来储存登陆的用户名和密码
#提前设置好商品信息
Goods = {1:"相机",2:"衣服",3:"裤子",4:"手表",5:"水杯",6:"劳斯莱斯-幻影",7:"电脑",8:"魔法仗",9:"奶茶",10:"Airpods"}
Value = {1:"8000",2:"300",3:"288",4:"6543",5:"50",6:"3000000",7:"15000",8:"6666",9:"8",10:"888"}

#定义一个和用户名密码有关的类
class RegisterUser():
    def __init__(self,user_name):
        self.user_name = user_name
    #增加一个密码的方法
    def Add_Passwd(self):
        passwd = input("请您输入这个用户名对应的密码：")
        name_passwd[self.user_name] = passwd
    # 增加一个删除的方法
    def Del_User(self,Del_name):
        # Del_name =input("请输入您需要注销的用户：")
        if Del_name in name_passwd.keys():
            name_passwd.pop(Del_name)
            print("用户注销成功")
        else:
            print("您好像尚未登陆")
    # 增加一个修改密码的方法
    def Change_passwd(self,name):
        # Change_user_name =input("请输入你需要修改密码的用户：")
        if name in name_passwd.keys():
            old_passwd = input("请输入你原先的密码:")
            if old_passwd == name_passwd[self.user_name]:
                new_passwd = input("请输入新的密码：")
                if new_passwd != self.name_passwd[name]:
                    name_passwd[name] = new_passwd
                    print("密码更新成功")
                    print(name_passwd)
                else:
                    print("请不要两次输入一样的密码")
            else:
                print("您输入的旧密码有误")
        else:
            print("您输入的用户名还未注册！")

#定义一个和登陆验证有关的类
class LoginAffirm(RegisterUser):
    # name = input("请输入你要登陆的用户的用户名:")
    def __init__(self,name):
        self.name = name
    def Examine_name(self,name):
        if self.name in name_passwd.keys():
            passwd_=input("请对应用户名的密码:")
            if passwd_ == name_passwd[self.name]:
                print(str("恭喜您成功登入三创购物系统!!").center(50,"="))
                login_name_dict[self.name] = 0
            else:
                print("您输入的密码有误")
        else:
            print("请输入一个已经注册的用户名")
    def look_all(self):
        if self.name in login_name_dict.keys():
            print(f"当前的已经登陆用户信息为:{login_name_dict}")
        else:
            print("您未登陆则没有权限查看此信息")

#定义一个改变账户金额的类
class ChangeMoney(LoginAffirm):
    def __init__(self,name1):
        self.name1 = name1
    #定义一个充值金额的方法
    def Add_money(self,name1):
        if self.name1 in login_name_dict.keys():
            money = input("请输入你要充值的金额:")
            login_name_dict[self.name1] += int(money)
            print(f"您目前的账户余额为：{login_name_dict}")
        else:
            print("请您先登陆后再进行充值")

#定义一个关于物品的类
class BuyGoods(ChangeMoney):
    def __init__(self,name):
        self.name = name
    #定义购买物品的方法
    def buy(self,choose_num):
        if self.name in login_name_dict:
            if int(choose_num) not in Value.keys():
                print("该商品已经卖光了或者不存在该商品")
            else:
                cost_money = Value[int(choose_num)]
                if int(cost_money) <= login_name_dict[name]:
                    Goods.pop(int(choose_num))
                    Value.pop(int(choose_num))
                    print("剩余商品为:")
                    print(Goods)
                    print(Value)
                    login_name_dict[self.name] -= int(cost_money)
                    print(f"您的账户余额为:{login_name_dict}")
                else:
                    print(str("您金额不够").center(50,"="))
        elif self.name in name_passwd:
            print("请您登陆后再进行操作!!")
        else:
            print("没有这个用户哦")
    #def Add_GOODS(self):  添加商品（只有商家用户可以进行）

#只能在本文件执行
if __name__ =="__main__":
    while True:
        #显示出菜单
        print(" 主菜单: \n =======================================\n 1.登陆系统 \n 2.充值 \n 3.注册用户 \n 4.查看已登录用户的信息 \n 5.购买物品 \n 6.修改密码 \n 7.注销账号 \n 8.查看商品信息(输入\"q\"退出三乐购物系统)\n =======================================")
        #用户做出选择
        caozuo = input("请问您需要进行哪项操作呢?（请输入菜单中的选项进行操作）:")
        if caozuo == "1":
            name = input("请输入你要登陆的用户的用户名:")
            A = LoginAffirm(name)
            A.Examine_name(name)
        if caozuo == "2":
            if login_name_dict == {}:
                print(str("您还没登陆，不能进行充值操作~~！".center(50,"=")))
            else:
                name1 = input("请输入你要充值的用户：")
                A = ChangeMoney(name1)
                A.Add_money(name1)
        if caozuo == "3":
            user_name = input("请设置你要注册用户的用户名:")
            A =RegisterUser(user_name)
            A.Add_Passwd()
        if caozuo == "4":
            if name_passwd == {}:
                print(str("请您先创建一个用户".center(50,"=")))
            else:
                name2 = input("请问您的用户名是：")
                a = LoginAffirm(name2)
                a.look_all()
        if caozuo == "5":
            if login_name_dict == {}:
                print("您还没登陆，不能进行购买操作~~！")
            else:
                print("商品与价格上下对应，且商品编号为数字")
                print(Goods)
                print(Value)
                name = input("请输入你使用哪位用户来进行购买:")
                choose_num = input("请输入你要购买的物品:")
                a = BuyGoods(name)
                a.buy(choose_num)
        if caozuo == "6":
            name = input("请输入你需要修改密码的用户名:")
            a = RegisterUser(name)
            a.Change_passwd(name)
        if caozuo == "7":
            if name_passwd == {}:
                print("当前不存在用户，还不能进行注销账号操作哦~~！")
            else:
                name = input("请输入你需要注销的用户名:")
                a = RegisterUser(name)
                a.Del_User(name)
        if caozuo == "8":
            print(str("当前商品信息为").center(100,"="))
            print(Goods)
            print(Value)
        if caozuo == "q":
            print("退出成功")
            break
        elif not caozuo.isdigit() and caozuo != "q":
            print("请您输入菜单中的选项哦~~~！")
